#include <iostream>
using namespace std;

int main()
{
    int var[5] = {1, 2, 3, 4, 5}; // 实际变量的声明
    int *ip;
    // 指针变量的声明
    int *ip_1;

    //ip = &var;
    //指针指向数组的时候不用 “&”取址符
    //ip = &var[2]
    //指针指向数组某一元素时要用 “&”取址符
    ip = var;
    // 在指针变量中存储 var 的地址
    ip_1 = &var[2];
    // 在指针变量中存储 var[2] 的地址
    cout << "Value of var variable: ";
    cout << var << endl;

    // 输出在指针变量中存储的地址
    cout << "Address stored in ip variable: ";
    cout << ip << endl;

    // 访问指针中地址的值
    cout << "Value of *ip variable: ";
    *ip = 30;
    cout << *ip << endl;
    cout << "\t" << var << endl;

    // 打印指针指向数组的某一元素的值
    cout << "Value of *ip_1 variable:";
    cout << *ip_1 << endl;
    short int height[10]; //int型的数组（short int 每个数据2字节）
    cout << "height       " << height << endl
         << "height+1     " << height + 1 << endl
         << "&height[0]   " << &height[0] << endl
         << "&height+1    " << &height + 1 << endl
         << "height+9     " << height + 9 << endl
         << "height+10    " << height + 10 << endl;
    // system("pause");
//     & 并不是不能用在数组名上，只是用在数组名和数组名[i]有所区别。例如：
// int height[10];//int型的数组
// cout << &height << endl;//&用在数组名上
// cout << &height[0] << endl;//&用在数组第一个元素上
// 上面 &height[0] 就是取得是数组第一个元素的地址，假设地址为 1000；&height 是直接对数组名进行取地址，这个时候就是取得是 height 整个数组的地址，
//指向包含 10 个元素的 int 型数组，地址范围为 1000~1036；
// 我们知道 height 等价于 &height[0]，height+1 会将地址加 4 个字节；但 &height+1 就是将地址增加 10*4 个字节。
    return 0;
}